class Init < ActiveRecord::Migration[5.0]
  def change
    #用户表
    create_table :users do |t|
      t.string :username, null: false
      t.string :email
      t.string :phone_num
      t.string :password_digest
      t.boolean :activity #是否激活
      t.integer :role_id #表示角色，用以区分权限
      t.integer :company_id
      t.timestamps
      t.index :company_id
      t.index :username, unique: true
    end

    #角色表,标记角色、权限
    create_table :roles do |t|
      t.string :name, null: false
      t.integer :privilege, null: false
    end

    #登录日志表
    create_table :user_logs do |t|
      t.integer :user_id
      t.uuid :uuid
      t.cidr :ipaddr
      t.timestamp :login_time
      t.timestamp :logout_time
      t.timestamps
      t.index :user_id
    end

    #公司表
    create_table :companies do |t|
      t.string :name, null: false
      t.string :corporation_name, null: false #法人姓名
      t.string :corporation_certid, null: false #法人身份证号
      t.string :telecom_1, null: false
      t.string :telecom_2
      t.text :address, null: false
      t.text :description
      t.boolean :activity #是否经过验证
      t.timestamps
  end

    #蜂场、蜂车、仓库等信息表
    create_table :locations do |t|
      t.string :responsible_name, null: false #负责任姓名
      t.integer :company_id
      t.string :self_type #类型
      t.string :telecom_1
      t.string :telecom_2
      t.text :address
      t.string :gps
      t.string :car_identification #车牌号
      t.text :description
      t.timestamps
      t.index :company_id
    end

    #视频源、直播源
    create_table :video_sources do |t|
      t.string :video_link
      t.text :description
      t.integer :location_id #摄像头位置或视频内容位置
      t.timestamps
      t.index :location_id
    end

    #蜂箱表
    create_table :beehives do |t|
      t.integer :location_id, null: false
      t.string :code, null: false #蜂箱条码
      t.integer :bee_category_id #蜂种
      t.integer :plant_id #蜜源植物
      t.timestamp :setup_time
      t.timestamps
      t.index :location_id
      t.index :code, unique: true
    end

    #蜂架表
    create_table :bee_frames do |t|
      t.integer :beehive_id, null: false #蜂箱id
      t.string :code, null: false #蜂架条码
      t.timestamp :setup_time
      t.timestamps
      t.index :beehive_id
      t.index :code, unique: true
    end

    #蜂种表
    create_table :bee_categories do |t|
      t.string :name
      t.text :description
      t.string :link
    end

    #蜜源植物表
    create_table :plants do |t|
      t.string :name
      t.text :description
      t.string :link
    end

    #养蜂日志表
    create_table :bee_processes do |t|
      t.integer :bee_action_id, null: false #养蜂行为
      t.string :origin_code, null: false #发起条码
      t.string :target_code #目标条码
      t.decimal :weight, precision: 8, scale: 3 #净含量
      t.integer :bee_medicine_id #施用蜂药
      t.timestamps
      t.integer :user_record
      t.timestamp :setup_time
      t.index :setup_time
      t.index :origin_code
      t.index :target_code
      t.index :weight
    end

    #蜂药表
    create_table :bee_medicines do |t|
      t.string :name
      t.string :code #蜂药条码
      t.text :description #蜂药描述，若无条码，必填
      t.timestamps
    end

    #养蜂行为表，记录操作行为
    create_table :bee_actions do |t|
      t.string :name
    end

    #产品信息表，详细列出已有的产品基础信息
    create_table :product_informations do |t|
      t.integer :company_id, null: false #所属公司
      t.string :code #产品条码，政府颁发商品条码
      t.text :description
      t.string :brand_id #商标
      t.decimal :weight, precision: 8, scale: 3 #净含量
      t.timestamps
      t.index :brand_id
      t.index :company_id
    end

    #商标表
    create_table :brands do |t|
      t.integer :company_id, null: false
      t.string :brand_name
      t.string :series_name
      t.text :brand_description 
      t.text :series_description 
      t.timestamp :brand_created_timed #商标创始时间
      t.timestamp :series_created_timed #系列创始时间
      t.timestamps
      t.index :company_id
    end

    #溯源结果表,在成品生成后，追溯溯源信息，存储至此表用于消费者查询
    create_table :product_results do |t|
      t.string :product_code
      t.string :origin_code
      t.string :target_code
      t.integer :bee_action_id
      t.decimal :weight, precision: 8, scale: 3 #净含量
      t.integer :bee_medicine_id
      t.timestamps
      t.timestamp :setup_time
      t.index :product_code, unique: true
    end

    #产品日志表，记录产品包装、分装等行为日志
    create_table :product_processes do |t|
      t.integer :product_action_id, null: false #行为类型
      t.string :origin_code, null: false
      t.string :target_code
      t.timestamp :setup_time
      t.integer :user_record
      t.timestamps
      t.index :setup_time
      t.index :origin_code
      t.index :target_code
    end

    #产品行为类型表
    create_table :product_actions do |t|
      t.string :name
    end

    create_table :product_expresses do |t|
      t.string :product_code, null: false #产品标识码
      t.string :express_num, null: false #物流单号
      t.string :express_company_id #物流公司
      t.string :status, null: false #操作状态类型：出库、入库、转发等
      t.timestamp :setup_time
      t.integer :user_record
      t.timestamps
      t.index :product_code
      t.index :setup_time
    end

    #物流公司表
    create_table :express_companies do |t|
      t.string :name
      t.string :website #物流公司网站
      t.string :type
    end

    #认证书表，用于记录各类认证书
    create_table :certifications do |t|
      t.string :cert_type, null: false #认证书类型，具体指出该证书类型，如身份证、营业执照、食品安全认证
      t.string :cert_num #认证书编号
      t.string :cert_level #认证书保密级别，用于区分显示权限
      t.string :hash, null: false #七牛返回hash值
      t.string :key, null: false #七牛返回key值
      t.integer :cert_pic_id #多态继承id
      t.string :cert_pic_type #多态继承type
      t.timestamp :exp_time #认证书过期时间
      t.timestamps
    end

    #图片表，记录所有普通图片信息
    create_table :pictures do |t|
      t.integer :picture_category_id, null: false #图片类型
      t.string :hash, null: false #七牛返回hash值
      t.string :key, null: false #七牛返回key值
      t.integer :imageable_id #多态继承id
      t.string :imageable_type #多态继承type
      t.integer :user_record
      t.timestamps
    end

    #机密图片表，记录所有保密图片信息
    create_table :secret_pictures do |t|
      t.integer :secret_picture_category_id, null: false
      t.string :hash, null: false
      t.string :key, null: false
      t.integer :secret_imageable_id
      t.string :secret_imageable_type
      t.timestamps
    end

    #图片类型表，记录图片分类情况
    create_table :picture_categories do |t|
      t.string :name
    end

    #机密图片类型表，记录机密图片分类情况
    create_table :secret_picture_categories do |t|
      t.string :name
    end

  end
end
